package com.javabasestage2.Object.ObjectMiddle.Poly.dynamicbinding;



public class dynamic {
    public static void main(String[] args) {
        //java重要特性：动态绑定机制(非常重要)
       //1.当调用【对象方法】时,该方法会和该对象的内存地址、运行类型【绑定】
        // 2.当调用【对象属性】时,没有动态绑定机制,哪里声明,哪里使用

        A a = new B();//向上转型
        System.out.println(a.sum());//? 40注销子类sum方法后->30
        System.out.println(a.sum1());//? 30注销子类sum1方法后->20
    }
}


class A{
    public int i =10;
    public int sum(){
        return  getI() + 10;//方法执行动态绑定机制，方法运行类型为B类
    }
    public  int sum1(){
        return i + 10;//属性无动态绑定机制
    }
    public int getI(){
        return i;
    }

}

class B extends  A{
    public int i =20;
//    public int sum(){
//        return  getI() + 20;
//    }
//    public  int sum1(){
//        return i + 10;
//    }
    public int getI(){
        return i;
    }

}